package com.yootk.di.service;

import com.yootk.di.config.MessageConfig;
import com.yootk.di.type.MessageSendStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 消息的服务处理
 */
public class MessageService implements AutoCloseable {
    private static final Logger LOGGER = LoggerFactory.getLogger(MessageService.class);

    // private MessageConfig config;
    private MessageConfig messageConfig;

    public MessageService() {
        LOGGER.debug("【构造方法】public MessageService() {}");
    }

    public MessageService(MessageConfig messageConfig) {
        LOGGER.debug("【构造方法】public MessageService(MessageConfig config) {}");
        this.messageConfig = messageConfig;
    }

    // 定义一个连接方法
    private boolean connect() {
        LOGGER.info("连接服务器：{}:{}", this.messageConfig.getHost(), this.messageConfig.getPort());
        return this.messageConfig.isEnable();  // 通过enable的状态来决定是否连接成功
    }

    // 消息发送
    public MessageSendStatus send(String msg) {
        if (this.connect()) {
            LOGGER.info("【消息发送】{}", msg);
            try {
                this.close();
            } catch (Exception e) {
                LOGGER.error("消息发送产生异常：{}", e.getMessage());
            }
            return MessageSendStatus.SUCCESS;
        }
        LOGGER.error("无法创建消息发送通道，消息发送失败。");
        return MessageSendStatus.FAILURE;
    }

    // 此时该Bean（注册完成的类对象），之中的config属性需要通过配置文件定义注入管理
    public void setConfig(MessageConfig messageConfig) {   // 外部注入config实例
        LOGGER.debug("【Setter方法】public void setConfig(MessageConfig config) {}");
        this.messageConfig = messageConfig;
    }

    @Override
    public void close() throws Exception {
        LOGGER.info("消息发送完毕，断开消息发送通道。");
    }
}
